package swardToOffer.struct_6_bit_operation;

/**
 * @Author ChanZany
 * @Date 2021/5/24 18:51
 * @Version 1.0

 面试题44：数字序列中某一位的数字
 题目：数字以0123456789101112131415…的格式序列化到一个字符序列中。在这
 个序列中，第5位（从0开始计数）是5，第13位是1，第19位是4，等等。请写一个函数求任意位对应的数字。

这是一道单纯的数学题，当n小于10，直接返回结果，这个大家都能想到。当n大于10呢？
我们先将n-=9，然后规律就出来了...

10 11 12 ... 98 99              --> 90   个数字每个数字占两位
100 101 102 ... 998 999         --> 900  个数字每个数字占三位
1000 1001 1002 ... 9998 9999    --> 9000 个数字每个数字占四位

2位数共占有 10*9*2 个下标
3位数公有 100*9*3 个下标
4位数公有 1000*9*4 个下标
观察上表，可推出各 digit下的数位数量count 的计算公式：
count=9×start×digit
根据以上分析，可将求解分为三步：
确定 n 所在 数字 的 位数 ，记为 digit ；
确定 n 所在的 数字 ，记为 num ；
确定 n 是 num中的哪一数位，并返回结果。

 */
public class DigitsInSequence {

    public int findNthDigit(int n) {
        int digit = 1;
        long start = 1;
        long count = 9;
        while (n > count) { // 1.
            n -= count;
            digit += 1;
            start *= 10;
            count = digit * start * 9;
        }
        long num = start + (n - 1) / digit; // 2.
        return Long.toString(num).charAt((n - 1) % digit) - '0'; // 3.
    }



    public static void main(String[] args) {
        DigitsInSequence Main = new DigitsInSequence();
        System.out.println(Main.findNthDigit(1000000000));
    }
}
